Open Computing Language (OpenCL) is a framework for writing programs that execute on a platform. A platform refers to a computing system that includes a host processor and a collection of one or more devices. For example, a platform may include various combinations of one or more central processing units (CPUs), graphics processing units (GPUs), digital signal processors (DSPs), programmable integrated circuits (ICs), and/or the like. One of the processors, e.g., the CPU, is typically designated as the host processor. Portions of the OpenCL application execute on the host processor and other portions of the OpenCL application referred to as kernels may be implemented by different ones of the devices.
While the majority of the devices noted above execute program code, a programmable IC may be used to hardware accelerate program code. Hardware acceleration refers to implementing the functionality of a portion of program code in hardware or circuitry. A hardware accelerator refers to a circuit implementation of computer readable program instructions (e.g., program code). A hardware accelerator is functionally equivalent to the program code being hardware accelerated. Thus, rather than execute a kernel of an OpenCL application on a processor to perform a given task, the kernel may be implemented as a hardware accelerator that performs the task.
While OpenCL provides many advantages, developers may be hampered by the lack of observability in the platform at run-time. This may be particularly true in cases where programmable ICs are used to hardware accelerate one or more kernels of the OpenCL application.